
Anh Tuan
Data Science Expert

EasySpider là công cụ ghi dữ liệu web trực quan mạnh mẽ cho phép bất kỳ ai thiết kế và thực hiện các tác vụ tự động hóa trình duyệt mà không cần viết mã. Giao diện dựa trên sơ đồ luồng trực quan của nó dễ sử dụng cho người không biết lập trình, đồng thời vẫn có khả năng cao cho các nhà phát triển.
CapSolver hoàn thiện trải nghiệm tự động hóa của EasySpider bằng cách cung cấp giải pháp giải CAPTCHA liền mạch. Mặc dù EasySpider hỗ trợ nhiều phương pháp nhận dạng CAPTCHA, việc tích hợp các giải pháp được cấp bằng trí tuệ nhân tạo của CapSolver đảm bảo việc vượt qua các thách thức CAPTCHA như reCAPTCHA, Cloudflare Turnstile và các loại CAPTCHA khác một cách đáng tin cậy và nhanh chóng.
EasySpider là công cụ ghi dữ liệu web và tự động hóa trình duyệt miễn phí, mã nguồn mở. Khác với các thư viện ghi dữ liệu truyền thống yêu cầu kiến thức lập trình, EasySpider cho phép bạn thiết kế tác vụ trực quan bằng cách nhấp và chọn các phần tử trên trang web.
EasySpider hoạt động dựa trên ba nguyên tắc cơ bản:
| Tính năng | Mô tả |
|---|---|
| Lồng vòng lặp vô hạn | Xử lý phân trang phức tạp và trích xuất dữ liệu đa cấp |
| Nhánh điều kiện | Tạo các điểm quyết định dựa trên nội dung trang |
| Lệnh dừng | Thoát khỏi vòng lặp ở bất kỳ đâu trong sơ đồ luồng |
| Biểu thức chính quy | Trích xuất dữ liệu bằng khớp mẫu |
| Nhận diện OCR | Trích xuất văn bản từ hình ảnh và ảnh chụp màn hình |
| Hỗ trợ proxy | Xoay IP và tạo kết nối |
CapSolver là dịch vụ giải CAPTCHA hàng đầu cung cấp các giải pháp dựa trên trí tuệ nhân tạo để vượt qua các thách thức CAPTCHA khác nhau. Với hỗ trợ cho nhiều loại CAPTCHA và thời gian phản hồi nhanh như chớp, CapSolver tích hợp liền mạch vào các quy trình tự động hóa.
Mặc dù EasySpider cung cấp hỗ trợ CAPTCHA tích hợp, việc tích hợp CapSolver mang lại nhiều lợi ích:
EasySpider_windows_x64.zip cho Windows 64-bitEasySpider_windows_x86.zip cho Windows 32-bitEasySpider_MacOS.dmg cho macOSEasySpider_Linux_x64.tar.gz cho LinuxEasySpider.exe (Windows) hoặc tệp thực thi tương ứngLưu ý: Đảm bảo cổng 8084 có sẵn cho giao tiếp giữa các tiến trình.
Nếu bạn dự định sử dụng script hỗ trợ CapSolver:
pip install requests
Dưới đây là lớp tiện ích CapSolver có thể tái sử dụng được thiết kế cho các quy trình Python:
import requests
import time
from typing import Optional
from dataclasses import dataclass
CAPSOLVER_API_KEY = 'YOUR_CAPSOLVER_API_KEY'
@dataclass
class TaskResult:
status: str
solution: Optional[dict] = None
error_description: Optional[str] = None
class CapSolverService:
def __init__(self, api_key: str = CAPSOLVER_API_KEY):
self.api_key = api_key
self.base_url = 'https://api.capsolver.com'
def create_task(self, task_data: dict) -> str:
response = requests.post(
f'{self.base_url}/createTask',
json={
'clientKey': self.api_key,
'task': task_data
}
)
data = response.json()
if data.get('errorId', 0) != 0:
raise Exception(f"CapSolver error: {data.get('errorDescription')}")
return data['taskId']
def get_task_result(self, task_id: str, max_attempts: int = 60) -> TaskResult:
for _ in range(max_attempts):
time.sleep(2)
response = requests.post(
f'{self.base_url}/getTaskResult',
json={
'clientKey': self.api_key,
'taskId': task_id
}
)
data = response.json()
if data.get('status') == 'ready':
return TaskResult(
status='ready',
solution=data.get('solution')
)
if data.get('status') == 'failed':
raise Exception(f"Task failed: {data.get('errorDescription')}")
raise Exception('Timeout waiting for CAPTCHA solution')
def solve_recaptcha_v2(self, website_url: str, website_key: str) -> str:
task_id = self.create_task({
'type': 'ReCaptchaV2TaskProxyLess',
'websiteURL': website_url,
'websiteKey': website_key
})
result = self.get_task_result(task_id)
return result.solution.get('gRecaptchaResponse', '') if result.solution else ''
def solve_turnstile(
self,
website_url: str,
website_key: str,
action: Optional[str] = None,
cdata: Optional[str] = None
) -> str:
task_data = {
'type': 'AntiTurnstileTaskProxyLess',
'websiteURL': website_url,
'websiteKey': website_key
}
if action or cdata:
metadata = {}
if action:
metadata['action'] = action
if cdata:
metadata['cdata'] = cdata
task_data['metadata'] = metadata
task_id = self.create_task(task_data)
result = self.get_task_result(task_id)
return result.solution.get('token', '') if result.solution else ''
# Thực thể toàn cục
capsolver = CapSolverService()
EasySpider cung cấp nhiều cách để tích hợp CapSolver. Chọn phương pháp phù hợp nhất với nhu cầu của bạn.
EasySpider hỗ trợ thực thi JavaScript tùy chỉnh trong quy trình của bạn. Đây là phương pháp tích hợp đơn giản nhất.
Bước 1: Tạo một tác vụ mới trong EasySpider và điều hướng đến trang bị CAPTCHA
Bước 2: Thêm nút "Hành động tùy chỉnh" với JavaScript sau:
// Trích xuất sitekey từ phần tử reCAPTCHA
var siteKey = document.querySelector('.g-recaptcha').getAttribute('data-sitekey');
var pageUrl = window.location.href;
// Lưu trữ để sử dụng trong bước tiếp theo
window.captchaSiteKey = siteKey;
window.captchaPageUrl = pageUrl;
// Ghi nhật ký để gỡ lỗi
console.log('Site Key:', siteKey);
console.log('Page URL:', pageUrl);
Bước 3: Sử dụng tính năng gọi hệ thống bên ngoài của EasySpider để gọi script Python giải CAPTCHA và trả về token
Bước 4: Thêm nút "Hành động tùy chỉnh" khác để chèn token:
// Token sẽ được truyền từ script bên ngoài
var token = arguments[0]; // Được truyền từ EasySpider
// Hiển thị ô văn bản phản hồi và đặt token
document.getElementById('g-recaptcha-response').style.display = 'block';
document.getElementById('g-recaptcha-response').value = token;
// Nếu có hàm gọi lại, thực thi nó
if (typeof ___grecaptcha_cfg !== 'undefined') {
var clients = ___grecaptcha_cfg.clients;
if (clients) {
Object.keys(clients).forEach(function(key) {
var client = clients[key];
if (client.callback) {
client.callback(token);
}
});
}
}
Đây là quy trình Turnstile không cần proxy sử dụng các nút trực quan của EasySpider. Nó không yêu cầu proxy.
Bước 1: Tạo một tác vụ mới và điều hướng đến trang bị Turnstile.
Bước 2: Thêm ba nút Hành động tùy chỉnh (chế độ mã = JavaScript) để bắt giữ dữ liệu Turnstile:
// Tiêu đề nút: TS_SiteKey
return document.querySelector('.cf-turnstile')?.getAttribute('data-sitekey') || '';
// Tiêu đề nút: TS_Action (tùy chọn)
return document.querySelector('.cf-turnstile')?.getAttribute('data-action') || '';
// Tiêu đề nút: TS_Cdata (tùy chọn)
return document.querySelector('.cf-turnstile')?.getAttribute('data-cdata') || '';
Bước 3: Thêm nút Thực thi lệnh hệ thống để giải Turnstile với CapSolver:
python captcha_solver.py "{{current_url}}" "Field[\"TS_SiteKey\"]" "turnstile" "Field[\"TS_Action\"]" "Field[\"TS_Cdata\"]"
Đặt tên nút này là Token để bạn có thể tham chiếu đầu ra của nó như Field["Token"].
Bước 4: Thêm nút Hành động tùy chỉnh (JavaScript) để chèn token:
var token = `Field["Token"]`;
var inputs = document.querySelectorAll('input[name="cf-turnstile-response"], input[name="turnstile-response"]');
inputs.forEach(function(el) {
el.value = token;
el.dispatchEvent(new Event('input', { bubbles: true }));
el.dispatchEvent(new Event('change', { bubbles: true }));
});
Bước 5: Nhấp vào nút gửi biểu mẫu (hoặc sử dụng JS gửi).
Lưu ý: Turnstile không cần proxy hoạt động trên nhiều trang, nhưng một số triển khai xác minh token theo IP của người giải. Nếu điều này xảy ra, giải CAPTCHA bằng proxy là bắt buộc.
Đối với người dùng nâng cao, bạn có thể mở rộng động cơ thực thi Python của EasySpider trực tiếp. Tập lệnh easyspider_executestage.py xử lý thực thi tác vụ và có thể được chỉnh sửa để bao gồm tích hợp CapSolver.
Vị trí: {EasySpider_Directory}/Code/easyspider_executestage.py
Thêm dịch vụ CapSolver vào ngữ cảnh thực thi:
# Thêm vào đầu easyspider_executestage.py
import requests
import time
# Thêm lớp CapSolver
class CapSolverService:
# ... (thực hiện từ trên)
pass
# Tạo thực thể toàn cục
capsolver = CapSolverService('YOUR_CAPSOLVER_API_KEY')
# Bây giờ capsolver.solve_recaptcha_v2() có sẵn trong các khối eval/exec
Sau đó trong tác vụ EasySpider của bạn, sử dụng tính năng "Thực thi mã Python":
# Trong khối thực thi Python của EasySpider
site_key = driver.find_element_by_class_name('g-recaptcha').get_attribute('data-sitekey')
token = capsolver.solve_recaptcha_v2(current_url, site_key)
driver.execute_script(f'''
document.getElementById('g-recaptcha-response').value = `{token}`;
''')
import time
from functools import wraps
from typing import Callable, TypeVar, Any
T = TypeVar('T')
def retry(max_retries: int = 3, exponential_backoff: bool = True):
"""Giao diện logic thử lại với backoff theo cấp số nhân."""
def decorator(func: Callable[..., T]) -> Callable[..., T]:
@wraps(func)
def wrapper(*args: Any, **kwargs: Any) -> T:
last_exception = None
for attempt in range(max_retries):
try:
return func(*args, **kwargs)
except Exception as e:
last_exception = e
if attempt < max_retries - 1:
delay = (2 ** attempt) if exponential_backoff else 1
print(f'Attempt {attempt + 1} failed, retrying in {delay}s...')
time.sleep(delay)
raise last_exception
return wrapper
return decorator
@retry(max_retries=3, exponential_backoff=True)
def solve_with_retry(capsolver, url: str, site_key: str) -> str:
return capsolver.solve_recaptcha_v2(url, site_key)
def check_balance(api_key: str) -> float:
response = requests.post(
'https://api.capsolver.com/getBalance',
json={'clientKey': api_key}
)
data = response.json()
return data.get('balance', 0)
def main():
balance = check_balance(CAPSOLVER_API_KEY)
if balance < 1:
print('Cảnh báo: Số dư CapSolver thấp! Vui lòng nạp tiền.')
else:
print(f'Số dư hiện tại: ${balance:.2f}')
Chạy tác vụ EasySpider từ dòng lệnh:
# Thực thi cơ bản
python easyspider_executestage.py --id [task_id] --read_type local --headless 1
# Với các tham số đầy đủ
python easyspider_executestage.py \
--ids [0] \
--server_address http://localhost:8074 \
--config_folder "./" \
--headless 1 \
--read_type local
Dưới đây là cách tạo một quy trình EasySpider hoàn chỉnh bao gồm tích hợp CapSolver:
https://www.google.com/recaptcha/api2/demo)Lưu tệp này dưới dạng captcha_solver.py trong thư mục EasySpider của bạn:
#!/usr/bin/env python3
"""
Script Hỗ trợ CapSolver cho EasySpider
Cách sử dụng: python captcha_solver.py <url> <site_key> <loại_captcha> [hành động] [cdata]
"""
import sys
import requests
import time
CAPSOLVER_API_KEY = 'YOUR_CAPSOLVER_API_KEY'
def solve_captcha(url, site_key, captcha_type='recaptcha_v2', action=None, cdata=None):
"""Giải CAPTCHA và trả về token."""
if captcha_type == 'recaptcha_v2':
task_type = 'ReCaptchaV2TaskProxyLess'
elif captcha_type == 'turnstile':
task_type = 'AntiTurnstileTaskProxyLess'
else:
raise ValueError(f'Loại CAPTCHA không biết: {captcha_type}')
# Tạo nhiệm vụ
task = {
'type': task_type,
'websiteURL': url,
'websiteKey': site_key
}
if captcha_type == 'turnstile' and (action or cdata):
metadata = {}
if action:
metadata['action'] = action
if cdata:
metadata['cdata'] = cdata
task['metadata'] = metadata
response = requests.post(
'https://api.capsolver.com/createTask',
json={
'clientKey': CAPSOLVER_API_KEY,
'task': task
}
)
data = response.json()
if data.get('errorId', 0) != 0:
raise Exception(f"Lỗi: {data.get('errorDescription')}")
task_id = data['taskId']
# Kiểm tra kết quả
for _ in range(60):
time.sleep(2)
response = requests.post(
'https://api.capsolver.com/getTaskResult',
json={
'clientKey': CAPSOLVER_API_KEY,
'taskId': task_id
}
)
data = response.json()
if data.get('status') == 'ready':
solution = data.get('solution', {})
return solution.get('gRecaptchaResponse') or solution.get('token')
if data.get('status') == 'failed':
raise Exception(f"Thất bại: {data.get('errorDescription')}")
raise Exception('Hết thời gian')
if __name__ == '__main__':
if len(sys.argv) < 3:
print('Cách sử dụng: python captcha_solver.py <url> <site_key> [loại_captcha] [hành động] [cdata]')
sys.exit(1)
url = sys.argv[1]
site_key = sys.argv[2]
captcha_type = sys.argv[3] if len(sys.argv) > 3 else 'recaptcha_v2'
action = sys.argv[4] if len(sys.argv) > 4 else None
cdata = sys.argv[5] if len(sys.argv) > 5 else None
try:
token = solve_captcha(url, site_key, captcha_type, action, cdata)
print(token) # Xuất token để EasySpider bắt giữ
except Exception as e:
print(f'LỖI: {e}', file=sys.stderr)
sys.exit(1)
Trong quy trình EasySpider của bạn, thêm nút "Thực thi Lệnh Hệ thống":
python captcha_solver.py "{{current_url}}" "{{site_key}}" "recaptcha_v2"
Đối với Turnstile (không cần proxy):
python captcha_solver.py "{{current_url}}" "{{site_key}}" "turnstile" "{{action}}" "{{cdata}}"
Kết quả (token) có thể được bắt và sử dụng trong các bước chèn JavaScript tiếp theo.
Việc tích hợp CapSolver với EasySpider tạo ra sự kết hợp mạnh mẽ cho tự động hóa web trực quan. Giao diện biểu đồ quy trình dễ sử dụng của EasySpider giúp thiết kế nhiệm vụ dễ dàng cho mọi người, trong khi CapSolver xử lý các thách thức CAPTCHA sẽ chặn tự động hóa của bạn.
Ưu điểm chính của sự tích hợp này:
Dù bạn đang xây dựng các luồng trích xuất dữ liệu, hệ thống giám sát hay khung thử nghiệm tự động, sự kết hợp EasySpider + CapSolver cung cấp trải nghiệm thiết kế trực quan và khả năng giải CAPTCHA cần thiết cho tự động hóa web hiện đại.
Sẵn sàng bắt đầu? Đăng ký CapSolver và sử dụng mã khuyến mãi EASYSPIDER để nhận thêm 6% khuyến mãi cho lần nạp đầu tiên!
EasySpider là công cụ quét web và tự động hóa trình duyệt miễn phí, mã nguồn mở. Nó cho phép người dùng thiết kế nhiệm vụ tự động hóa qua giao diện biểu đồ quy trình trực quan mà không cần viết mã, đồng thời hỗ trợ mã JavaScript, Python và câu lệnh Selenium cho các trường hợp nâng cao.
CapSolver tích hợp với EasySpider thông qua nhiều phương pháp: chèn JavaScript tùy chỉnh trong quy trình EasySpider, script Python bên ngoài được gọi qua lệnh hệ thống, hoặc sửa đổi trực tiếp động cơ thực thi Python của EasySpider. Tất cả các phương pháp đều sử dụng API của CapSolver để giải CAPTCHA và chèn token vào trang.
EasySpider có hỗ trợ một số phương pháp nhận dạng CAPTCHA và khả năng OCR. Tuy nhiên, tích hợp với CapSolver cung cấp tỷ lệ thành công cao hơn, thời gian giải nhanh hơn và phạm vi loại CAPTCHA rộng hơn cho các quy trình tự động hóa sản xuất.
CapSolver hỗ trợ nhiều loại CAPTCHA bao gồm reCAPTCHA v2, reCAPTCHA v3, Cloudflare Turnstile, AWS WAF, GeeTest v3/v4 và nhiều hơn nữa.
CapSolver cung cấp giá cả cạnh tranh dựa trên loại và khối lượng CAPTCHA được giải. Truy cập capsolver.com để xem chi tiết giá hiện tại. Sử dụng mã EASYSPIDER để nhận 5% khuyến mãi cho lần nạp đầu tiên.
Vâng, EasySpider hoàn toàn miễn phí và mã nguồn mở dưới giấy phép AGPL-3.0. Phần mềm cho phép sử dụng thương mại miễn phí và sửa đổi. Các triển khai dịch vụ mạng phải cung cấp mã nguồn truy cập cho người dùng.
Khóa site thường được tìm thấy trong mã nguồn HTML của trang:
data-sitekey trên phần tử .g-recaptchadata-sitekey trên phần tử .cf-turnstileVâng, EasySpider hỗ trợ thực thi từ dòng lệnh thông qua easyspider_executestage.py. Điều này cho phép tích hợp với các hệ thống khác, thực thi tác vụ định kỳ và tự động hóa không cần màn hình.
EasySpider có sẵn cho Windows (x64/x86), macOS và Linux. Tải phiên bản phù hợp từ trang Phát hành GitHub.
Học kiến trúc gỡ mã web Rust có thể mở rộng với reqwest, scraper, gỡ mã bất đồng bộ, gỡ mã trình duyệt không đầu, xoay proxy và xử lý CAPTCHA tuân thủ.

Tự động hóa việc giải CAPTCHA với Nanobot và CapSolver. Sử dụng Playwright để giải reCAPTCHA và Cloudflare tự động.
